package jp.seraph.jsade.task;

import jp.seraph.jsade.action.AgentAction;
import jp.seraph.jsade.core.World;

public interface TaskSelector {
    /**
     * TaskSelectorAgentが実行すべきTaskを返します。
     * TaskSelectorAgentはこのメソッドを毎ステップ呼び出し，返されたTaskの実行を開始します。
     * このメソッドがnull以外を返した時、実行中のTaskが存在する場合、そのタスクはキャンセルされます。
     * このメソッドがnullを返した場合、エージェントのTaskは変更されません。
     *
     * @param aWorld
     * @return
     */
    public AgentTask selectTask(World aWorld);

    /**
     * 実行すべきActionを選択し返却するメソッドです
     * TaskSelectorAgentはこのメソッドを毎ステップ呼び出します。
     * 返値がnull以外である時、そのActionをそのターンに実行します。
     *
     * @param aWorld
     * @return 実行すべきAction
     * @see jp.seraph.jsmf.action.AgentAction
     */
    public AgentAction getAgentAction(World aWorld);
}
